#include "stm32f10x.h"                  // Device header


/**
  * @brief		定时器初始化
  * @parm		无
  * @retval		无
  */
void Timer_Init(void)
{
	//开启TIM2的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	//配置时钟源
	//配置内部时钟源为TIM2，若不配置，则默认为内部时钟
	TIM_InternalClockConfig(TIM2);
	
	//初始化时基单元
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;			//时钟分频，选择不分频，此参数用于配置滤波器时钟，不影响时基单元功能
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;		//向上计数，从0到重装值
	TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;					//重装值 - 1，因为从0开始，ARR的值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;					//预分频器，PSC的值。如配置为72，即系统频率72MHz / 72 = 1MHz
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;				//重复计数器，高级定时器才会用到
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	//中断部分
	//时基单元初始化完成后会发起一次更新事件，需要清理一下，避免影响复位
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);
	
	//开启TIM2的更新中断
	TIM_ITConfig(TIM2, TIM_FLAG_Update, ENABLE);
	
	//中断优先级组
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	//NVIC初始化
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;						//中断通道
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;						//使能开关
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	
	//开启TIM2
	TIM_Cmd(TIM2, ENABLE);
}

/**
  * @brief		获取计数器值
  * @parm		无
  * @retval		计数值，范围：0 ~ 65535
  */
uint16_t Timer_GetCount(void)
{
	return TIM_GetCounter(TIM2);
}



